const { OpenAI } = require('openai');
require('dotenv').config();

class SQLGeneratorModel {
  constructor() {
    // 初始化LLM客户端
    this.openai = new OpenAI({
      baseURL: process.env.AI_API_BASE_URL || 'https://api.scnet.cn/api/llm/v1',
      apiKey: process.env.AI_API_KEY
    });
    
    // TODO: 将现有的提示词模板从routes/sql-generator.js移动到这里
    this.promptTemplates = {
      basic: `将以下自然语言查询转换为SQL:

表名: {dbTable}
查询: {description}

仅返回SQL语句，不要包含任何解释或注释。
`,
      improved: `请将以下自然语言查询转换为SQL查询语句。

数据库表信息:
表名: {dbTable}
字段: review_id(INT), merchant(VARCHAR), rating(TINYINT), score_taste(TINYINT), 
score_environment(TINYINT), score_service(TINYINT), price_per_person(DECIMAL), 
time(VARCHAR), num_thumbs_up(INT), num_response(INT), content_review(TEXT), 
reviewer(VARCHAR), reviewer_value(INT), reviewer_rank(INT), favorite_foods(VARCHAR)

查询需求: {description}

只需返回SQL查询语句，无需任何解释或注释。确保SQL语法正确并适用于MySQL/TiDB。`,
      advanced: `作为SQL专家，你的任务是将自然语言转换为精确的SQL查询语句。

数据库表详细信息:
表名: {dbTable}
表结构:
- review_id: INT (主键，唯一标识每条评价)
- merchant: VARCHAR(100) (餐厅名称)
- rating: TINYINT (总体评分，1-5分)
- score_taste: TINYINT (口味评分，1-5分)
- score_environment: TINYINT (环境评分，1-5分)
- score_service: TINYINT (服务评分，1-5分)
- price_per_person: DECIMAL(8,2) (人均价格)
- time: VARCHAR(50) (就餐时间，如"2023年1月")
- num_thumbs_up: INT (点赞数量)
- num_response: INT (回复数量)
- content_review: TEXT (评价内容)
- reviewer: VARCHAR(50) (评价人)
- reviewer_value: INT (评价人价值)
- reviewer_rank: INT (评价人等级)
- favorite_foods: VARCHAR(255) (喜爱的食物)

用户查询需求: {description}

示例对应:
1. 自然语言: "找出评分超过4分的餐厅及其评价数量"
   SQL: SELECT merchant, AVG(rating) as avg_rating, COUNT(*) as review_count FROM restaurant_reviews WHERE rating > 4 GROUP BY merchant ORDER BY avg_rating DESC;

2. 自然语言: "计算所有餐厅的平均人均消费"
   SQL: SELECT merchant, AVG(price_per_person) as avg_price FROM restaurant_reviews GROUP BY merchant ORDER BY avg_price;

请生成适用于MySQL/TiDB的SQL查询语句。确保使用正确的聚合函数、条件表达式、排序和分组。只返回SQL查询语句本身，不包含任何解释或注释。`
    };
  }

  // TODO: 实现selectPromptTemplate方法
  selectPromptTemplate(promptType = 'advanced') {
    // 返回对应的提示词模板
  }

  // TODO: 实现extractSQLFromResponse方法
  extractSQLFromResponse(text) {
    // 从LLM响应中提取SQL代码
  }

  // TODO: 实现isSQLSafe方法
  isSQLSafe(sql) {
    // 检查SQL是否安全
  }

  // TODO: 实现generateSQL方法
  async generateSQL(description, dbTable, promptType = 'advanced') {
    // 生成SQL的核心逻辑
  }

  // TODO: 实现executeSQL方法
  async executeSQL(sql, dbPool) {
    // 执行SQL查询
  }
}

module.exports = new SQLGeneratorModel();